/*
============================================================================
 Name        : dd_msg_queue.h
 Author      : Jian
 Version     :
 Copyright   : GPL
 Description : dd_msg_queue.h - header file
============================================================================
*/

#ifndef DD_MSG_QUEUE_H
#define DD_MSG_QUEUE_H

#include "sd_platform.h"

__DD_BEGIN_DECLS

typedef void data_free(void* data) ;
typedef void handle_mq_msg(DD_UINT id, void* data, DD_UINT len) ;

struct __dd_condition ;
struct __dd_queue ;

typedef struct {
    data_free*             freeFun ;
    sd_semp*               queueLock ;
    struct __dd_condition* cont ;
    struct __dd_queue*     queue ;
} dd_msg_queue;

enum {
    EMQFlagSignalAll = (1 << 0),
    EMQFlagWait      = (1 << 1) 
};

dd_msg_queue* dd_mqueue_create(data_free* freeFun) ;

void dd_mqueue_destroy(dd_msg_queue* msgQueue) ;

int dd_mqueue_send(dd_msg_queue* msgQueue, DD_UINT id, void* data, DD_UINT len, int flag) ;

int dd_mqueue_recv(dd_msg_queue* msgQueue, handle_mq_msg* handler, int flag) ;

void dd_mqueue_reset(dd_msg_queue* msgQueue) ;

__DD_END_DECLS	

#endif  /* DD_MSG_QUEUE_H */

/* End of File */

